package cn.source.rank.service.impl;

import java.util.List;

import cn.source.subject.domain.SmSubject;
import cn.source.subject.mapper.SmSubjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.source.rank.mapper.RankMapper;
import cn.source.rank.domain.Rank;
import cn.source.rank.service.IRankService;

/**
 * 专业排名管理Service业务层处理
 *
 * @author xuhao
 * @date 2023-12-21
 */
@Service
public class RankServiceImpl implements IRankService
{
    @Autowired
    private RankMapper rankMapper;

    @Autowired
    private SmSubjectMapper smSubjectMapper;

    /**
     * 查询专业排名管理
     *
     * @param id 专业排名管理主键
     * @return 专业排名管理
     */
    @Override
    public Rank selectRankById(Long id)
    {
        return rankMapper.selectRankById(id);
    }

    /**
     * 查询专业排名管理列表
     *
     * @param rank 专业排名管理
     * @return 专业排名管理
     */
    @Override
    public List<Rank> selectRankList(Rank rank)
    {
        return rankMapper.selectRankList(rank);
    }

    /**
     * 新增专业排名管理
     *
     * @param rank 专业排名管理
     * @return 结果
     */
    @Override
    public int insertRank(Rank rank) {
        // 首先插入Rank信息
        rankMapper.insertRank(rank);

        List<String> subjectList = rank.getSubject();
// 获取插入的Rank的mCode
        String mcode = rank.getMcode();
        SmSubject smSubject = new SmSubject();

        if (subjectList != null && !subjectList.isEmpty()) {
            // 使用String.join来将集合的元素连接成一个字符串
            String subjectsStr = String.join(",", subjectList);

            // 构造只有一个subject的SmSubject对象
            smSubject.setSubject(subjectsStr);
            smSubject.setMCode(mcode);

            // 插入合并后的SmSubject信息，只插入一次
            smSubjectMapper.insertSmSubject(smSubject);
        }


        return 1;
    }

    /**
     * 修改专业排名管理
     *
     * @param rank 专业排名管理
     * @return 结果
     */
    @Override
    public int updateRank(Rank rank) {
        // 更新Rank信息
        int rankUpdateResult = rankMapper.updateRank(rank);

        // 获取更新的Rank的mCode和subject列表
        String mcode = rank.getMcode();
        List<String> subjectList = rank.getSubject();

        // 判断subjectList是否为空
        if (subjectList != null && !subjectList.isEmpty()) {
            // 使用String.join连接subjectList成为一个字符串
            String subjectsStr = String.join(",", subjectList);

            // 创建一个SmSubject对象，并设置mCode和subject字段
            SmSubject smSubject = new SmSubject();
            smSubject.setMCode(mcode);
            smSubject.setSubject(subjectsStr);

            smSubjectMapper.updateSmSubject(smSubject);
            // 判断此mCode对应的SmSubject记录是否存在
            // 假设有一个方法checkSmSubjectExists来检查记录是否存在
//            boolean exists = smSubjectMapper.checkSmSubjectExists(mCode);

//            if (exists) {
//                // 如果记录存在，更新该条记录
//                smSubjectMapper.updateSmSubject(smSubject);
//            } else {
//                // 如果记录不存在，插入新记录
//                smSubjectMapper.insertSmSubject(smSubject);
//            }
        }

        return rankUpdateResult;
    }

    /**
     * 批量删除专业排名管理
     *
     * @param ids 需要删除的专业排名管理主键
     * @return 结果
     */
    @Override
    public int deleteRankByIds(Long[] ids)
    {
        return rankMapper.deleteRankByIds(ids);
    }

    /**
     * 删除专业排名管理信息
     *
     * @param id 专业排名管理主键
     * @return 结果
     */
    @Override
    public int deleteRankById(Long id)
    {
        return rankMapper.deleteRankById(id);
    }
}
